<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>09_Promise的几个关键问题2</title>
</head>

<body>
  <!-- 
    改变 Promise实例的状态和指定回调函数谁先谁后呢?
      1. 都有可能, 正常情况下是【先指定回调再改变状态】, 但也可以【先改状态在指定回调】
      2. 如何先改状态在指定回调?
          同步执行 改变状态
          延迟一会在调用 then()
      3. Promise 实例什么时候才能得到数据?
        如果先指定回调, 那当状态发生改变时, 回调函数就会调用, 得到数据
        如果先改变状态, 那当指定回调时,     回调函数就会调用, 得到数据.
  -->

  <script>
    // #region 演示: 【先指定回调, 后改变状态】 (最常见)
    // const p = new Promise((resolve,reject) => {
    //   setTimeout(() => { 
    //     resolve('a');      // 2. 后改变的状态(同时指定数据, 异步执行【回调函数】
    //   }, 1000);
    // });

    // p.then(                // 1. 先指定回调函数, 【保存当前指定的回调函数】.
    //   (value) => { console.log('成功了:', value)},
    //   (reason) => { console.log('失败了:', reason)}
    // );
    // #endregion


    // #region 演示: 【先改变状态, 后指定回调】
    // const p = new Promise((resolve,reject) => {
    //   resolve('a');        // 1. 同步执行, 先改变状态, (同时指定并【保存数据】)
    // });

    // p.then(                // 2. 后指定回调函数, 异步执行回调函数【拿到数据】
    //   (value) => { console.log('成功了:', value)},
    //   (reason) => { console.log('失败了:', reason)}
    // );
    // #endregion


    // #region 演示: 【先改变状态, 后指定回调】
    // const p = new Promise((resolve,reject) => {
    //   setTimeout(() => {
    //     resolve('a');       // 1. 先改变状态, (同时指定并【保存数据】)
    //   }, 1000);
    // });

    // setTimeout(() => {
    //   p.then(             // 2. 延迟指定回调函数, 异步执行回调函数【拿到数据】
    //     (value) => { console.log(value) },
    //     (reason) => { console.log(reason) }
    //   )
    // }, 1000);
    // #endregion

  </script>
</body>

</html>
